package me.learningandroid.ch2_4.lifecycle;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.ToggleButton;

import com.google.android.material.chip.Chip;

public class MainActivity extends AppCompatActivity {

    // 代码中临时的状态
    private int restartCount=0;

    // 创建时被系统调用
    // 用处：创建UI，初始化资源，如JVM线程，对应`onDestroy`
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 业务方法
        Log.i(this.getLocalClassName(),"onCreate");
        TextView textView = findViewById(R.id.textView);
        textView.setText(String.format("已重启：%d次",restartCount));
    }

    // 当恢复暂停状态时被系统调用
    // 需要特殊处理的重启逻辑，如Cursor
    @Override
    protected void onRestart() {
        super.onRestart();
        // 业务方法
        Log.i(this.getLocalClassName(),"onRestart");
    }

    // 当恢复暂停状态时被系统调用
    // 初始化资源，对应`onStop`
    @Override
    protected void onStart() {
        super.onStart();
        // 业务方法
        Log.i(this.getLocalClassName(),"onStart");
    }

    // 当进入运行状态时被系统调用
    // 初始化独占、高CPU、高用电量的资源，对应`onPause`
    @Override
    protected void onResume() {
        super.onResume();
        // 业务方法
        Log.i(this.getLocalClassName(),"onResume");
    }

    // 当进入暂停状态时被系统调用
    // 释放独占、高CPU、高用电量的资源；保存本地资源等；不能执行耗时操作，否则会影响应用切换。
    @Override
    protected void onPause() {
        // 业务方法
        Log.i(this.getLocalClassName(),"onPause");
        super.onPause();
    }

    // 当进入停止状态时被系统调用
    // 处理可见资源，如动画；处理网络请求；可执行相对较耗时的操作。
    @Override
    protected void onStop() {
        // 业务方法
        Log.i(this.getLocalClassName(),"onStop");
        super.onStop();
    }

    // 当被销毁前被系统调用
    // 销毁应用程序的资源，例如线程资源。不能用来处理持久化资源，如数据库、Bundle等。
    @Override
    protected void onDestroy() {
        // 业务方法
        Log.i(this.getLocalClassName(),"onDestroy");
        super.onDestroy();
    }

    //  - 仅当应用重启时（例如在屏幕旋转后），在`onCreate`之后调用
    //  - 用于恢复临时状态
    //  - 必须调用超类实现。
    //  - `AppCompatActivity`中的实现会恢复UI控件的状态。开发者还应该恢复代码中的临时状态。
    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        // `AppCompatActivity`提供的实现会恢复UI状态。
        super.onRestoreInstanceState(savedInstanceState);
        // 业务方法
        Log.i(this.getLocalClassName(),"onRestoreInstanceState");
        restartCount = savedInstanceState.getInt("restartCount");
        restartCount += 1;
        TextView textView = findViewById(R.id.textView);
        textView.setText(String.format("已重启：%d次",restartCount));
    }

    //  - 当应用为了重启，销毁前调用，在`onStop`之后调用
    //  - 用于保存临时状态
    //  - 必须调用超类实现。
    //  - `AppCompatActivity`中的实现会保存UI控件的状态。开发者还应该保存代码中的临时状态。
    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        // `AppCompatActivity`提供的实现会保存UI状态。
        super.onSaveInstanceState(outState);

        // 业务方法
        Log.i(this.getLocalClassName(),"onSaveInstanceState");
        // `Bundle`的使用方法类似`Map`
        outState.putInt("restartCount",restartCount);
    }
}